package com.fallsvc.chatroom.component;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

/**
 * @auther falls_vc
 * description:
 * @date 2025/5/5  15:26
 */
// 记录当前用户的在线状态 用来维护userId 和 WebSocketSession 映射
@Component
@Slf4j
public class OnlineUserManager {
    // 线程安全hash
    private ConcurrentHashMap<Integer, WebSocketSession> sessions=new ConcurrentHashMap<>();
    // 1.用户上线 给hash表插入键值对
    public void online(int userId,WebSocketSession webSocketSession){
        if(sessions.get(userId)!=null){
            //  其它登录地方不能收发信息
            log.info("当前用户会话已经存在");
            return;
        }
        sessions.put(userId,webSocketSession);
        log.info("用户["+userId+"] 上线！");
    }
    // 2. 用户线下，针对hash表进行元素删除
    public void offline(int userId,WebSocketSession webSocketSession){
        WebSocketSession session=sessions.get(userId);
        if(session==webSocketSession){
            // 同一个会话 防止多开导致登录会话紊乱
            sessions.remove(userId);
            log.info("用户["+userId+"] 下线！");
        }
    }

    // 3. 根据userId 获取 WebSocketSession
    public WebSocketSession getWebSocketSession(int userId){
        return sessions.get(userId);
    }
}
